package commonClass;

/**
 * StringVsStringBufferVsStringBuilder.java
 * 效率 ： StringBuilder > StringBuffer > String
 */
public class StringVsStringBufferVsStringBuilder {

    public static void main(String[] args) {

        /*
            1) 如果字符串存在大量修改操作，一般使用 StringBuffer 或 StringBuilder
            2) 如果字符串存在大量修改操作，并在单线程情况下，使用 StringBuilder
            3) 如果字符串存在大量修改操作，并在多线程情况下，使用 StringBuffer
            4) 如果字符串很少修改，被多个对象引用，使用 String，比如配置信息
         */

        long startTime = 0L;
        long endTime = 0L;
        StringBuffer buffer = new StringBuffer("");
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 80000; i++) {//StringBuffer 拼接 20000 次
            buffer.append(String.valueOf(i));
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer 的执行时间：" + (endTime- startTime));

        StringBuilder builder = new StringBuilder("");
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 80000; i++) {//StringBuilder 拼接 20000 次
            builder.append(String.valueOf(i));
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder 的执行时间：" + (endTime- startTime));

        String text = "";
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 80000; i++) {//String 拼接 20000
            text = text + i;
        }
        endTime = System.currentTimeMillis();
        System.out.println("String 的执行时间：" + (endTime- startTime));
    }
}
